import {
  ArrayStack,
  ObjectStack,
  LinkedListStack,
} from './Stack/index';
import {
  transDecimalOtherCarryInt,
} from './Stack/tools';

import {
  Queue,
  DeQueue,
} from './Queue';
import {
  hotPotato,
  palidromeChecker,
} from './Queue/tool';

import {
  LinkedListSingly,
  LinkedListDoubly,
  CircularLinkedListSingly,
  CircularLinkedListDoubly,
  SortedLinkedList,
} from './LinkedList/index';

import {
  SetBaseMap,
  SetBaseArray,
} from './Set/index';

import {
  Dictionary,
  HashTableDL,
  HashTableLP,
} from './Dictionary';

import {
  BinarySearchTree,
  AVLTree,
  RedBlackTree,
} from './Tree/index';

import {
  MinHeap,
  MaxHeap,
} from './Heap/index';

import {
  Graph,
} from './Graph';

import {
  recursion,
} from './Recursion';

import {
  sortBuble,
} from './Sort';

import * as Design from './Design';

const DataStructure = {
  ArrayStack,
  ObjectStack,
  LinkedListStack,

  Queue,
  DeQueue,
  
  LinkedListSingly,
  LinkedListDoubly,
  CircularLinkedListSingly,
  CircularLinkedListDoubly,
  SortedLinkedList,

  SetBaseMap,
  SetBaseArray,

  Dictionary,
  HashTableDL,
  HashTableLP,

  BinarySearchTree,
  AVLTree,
  RedBlackTree,

  MinHeap,
  MaxHeap,

  Graph,
};

const Algorithm = {
  sortBuble,
};

const tools = {
  // Stack tools
  DataStructure,
  transDecimalOtherCarryInt,
  // Queue tools
  hotPotato,
  palidromeChecker,
  // Recursion
  recursion,
  // Algorithm
  Algorithm,
  Design
};

export default tools;
